
//658.找到K个最接近的元素
class Solution {
public:
    vector<int> findClosestElements(vector<int>& arr, int k, int x) {
        //先找到数组中最接近x的位置
        int n=arr.size();
        int pos=0;int near=INT_MAX;  //用pos位置来记录最接近x的位置
        for(int i=0;i<n;i++) 
        {
            if(near>abs(arr[i]-x))
            {
                near=abs(arr[i]-x);
                pos=i;
            }
        }
        //此时的pos位置就是最接近x的位置
        int cur1=pos,cur2=pos+1;  //将cur1向前走，cur2向后走,进行一次判断去哪一边的元素
        while(k&&cur1>=0&&cur2<n)
        {
            int left=abs(arr[cur1]-x);
            int right=abs(arr[cur2]-x);

            if(left>right) cur2++; //取右边的
            else cur1--;          //取左边的
            k--;
        }
        while(k&&cur1>=0) cur1--,k--;   //防止k还没有完
        while(k&&cur2<n) cur2++,k--;

        vector<int> ret(arr.begin()+cur1+1,arr.begin()+cur2);
        return ret;
    }
};